package com.cn.wanxi.util;

import redis.clients.jedis.Jedis;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/*")
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("inint");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse resp = (HttpServletResponse) servletResponse;
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setHeader("Access-Control-Allow-Origin", "http://localhost:8085");
        resp.setHeader("Access-Control-Allow-Credentials", "true");
//对于某些页面是不需要登陆，也可以访问，只有后台页面才必须登陆
//        只要我们访问后台管理的地址有back的情况下才需要登陆
        String url = req.getServletPath();//得到访问路径
        System.out.println(url);
//        如果访问地址有back就需要过滤，
        if (url.startsWith("/back/")) {
            String un=req.getParameter("token");
//            String username = (String) req.getSession().getAttribute(un);
            Jedis jedis=new Jedis();
            String username=jedis.get(un);
            if (username == null) {
                resp.getWriter().println(400);
            } else {
                filterChain.doFilter(req, resp);//放行的操作
            }
        } else {
            filterChain.doFilter(req, resp);//放行的操作
        }
//        String username = (String) req.getSession().getAttribute("username");
//        if(username==null){
//
//        }else {
//            filterChain.doFilter(req, resp);//放行的操作
//        }

    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
    /**
     * 1.过滤器和拦截器
     * 2.session认证
     *  1）.每一个页面必须判断是否已经登陆，如果没有登陆，则跳转到登陆页面
     *  2）.所以，我们后台的每一个页面加载时，必须访问后台servlet，
     *  3）.新建一个filter。
     *   1）乱码解决
     *   2）判断当前访问的路径是否为后台管理页面的路径
     *    1）如果是，则必须登陆
     *    2）否则直接展示页面
     *  必要条件：登陆的时候必须将登录名存入session。因为filter需要session拿到当前登陆的用户名
     *
     *
     */
}
